package com.itheima.proxy.jdk;

import com.itheima.proxy.jdk.impl.Tesla;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author wz
 * @description:
 * @date 2021-10-31
 */
public class TeslaProxy {
    public static void main(String[] args) {
        //目标对象 对该对象的run方法进行增强
        Car tesla=new Tesla();
        //获取代理对象
        Car proxy = (Car) Proxy.newProxyInstance(tesla.getClass().getClassLoader(),
                tesla.getClass().getInterfaces(),
                new InvocationHandler() {
                    /**
                     *
                     * @param proxy  当前代理对象的引用
                     * @param method 当前目标对象正在执行的方法
                     * @param args 方法的入参
                     * @return
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("启动前注意山车是否有效.....");
                        Object result = method.invoke(tesla, args);
                        System.out.println("行车注意安全.....");
                        return result;
                    }
                }
        );

        proxy.run();
    }
}
